每次我尝试使用"script/runner -e production ClassName.run"从我的rails 2.2 app的lib目录运行任何类时,我收到以下错误:
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/runner.rb:47: /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing': uninitialized constant ClassName (NameError)"
出于某种原因,当我运行它,因为我没有得到这个错误test
,而不是production
,和一切工作正常.
O是的,run
是一种类方法,即def self.run .... end
有什么建议?
当ruby找不到类或模块时,会发生该错误.我从一开始:
检查gem依赖项(它们对所有环境都相同吗?)
在代码中搜索定义ClassName的任何内容,特别是模块,类和插件.
在dev中禁用每个插件,是否有任何插件突然导致该错误?
如果代码在lib中,则将lib require语句添加到production.rb以强制在生产中加载lib.
希望有所帮助.
更新只是总结评论它是选项4.
除非您只想在生产中加载lib,否则您应该考虑通过执行以下操作之一来确保所有环境加载lib:
使用require中的require创建rails初始化程序(config/initializers下的.rb文件)
通过启用和修改config.load_paths变量,将路径添加到config/environment.rb中的lib.